package edu.luc.example;
/*
 * Copyright (c) 1995 - 2008 Sun Microsystems, Inc.  All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions
 * are met:
 *
 *   - Redistributions of source code must retain the above copyright
 *     notice, this list of conditions and the following disclaimer.
 *
 *   - Redistributions in binary form must reproduce the above copyright
 *     notice, this list of conditions and the following disclaimer in the
 *     documentation and/or other materials provided with the distribution.
 *
 *   - Neither the name of Sun Microsystems nor the names of its
 *     contributors may be used to endorse or promote products derived
 *     from this software without specific prior written permission.
 *
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
 * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
 * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
 * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR
 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
 * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
 * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
 * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 */ 


import java.io.FileReader;
import java.io.BufferedReader;
import java.io.IOException;
import java.util.Scanner;
import java.util.Locale;


public class Calculator {

    private static double sum = 0.0;
    private Scanner s = null;

    public void add(double n) {
        sum = sum + n;
    }

    public void subtract(double n) {
        //sum = sum + 1 - n;
        sum = sum - n;
    }

    public void multiply(double n) {
        sum = n * sum;
    }         

    public void divide(double n) {
        if(n==0)
        {
        	System.out.println("cannot divide by zero!!");
        	return;
        }
        else
        {
        	sum = sum / n;
        }    	
    }

    public void square(double n) {
        //sum = (sum * 2) - 1;
    	sum = n * n;
    }

    public void squareRoot(double n) {
//        for (; ;) {
//        	sum = (sum * 3) / 3;
//        
//        }
    	if(n >= 0)
    	{
    		sum = Math.sqrt(n);
    	}
    	else
    	{
    		System.out.println("Cannot get square root of a negative number");
    		return;
    	}
    	
    	
    }

    public void clear() {           // Cleans the result
        sum = 0.0;
    }

    public void switchOn() {
        // Switch on the screen, display "hello", beep
        // and do other things that calculator do nowadays
        sum = 0.0;
    }

    private void openInputFile() {
        try {
            s = new Scanner(
                    new BufferedReader(new FileReader("innumbers.txt")));
            s.useLocale(Locale.US);
        } catch (IOException e) {
            e.printStackTrace();  //Output goes to System.err.
        }   	
    }

    private void closeInputFile() {
        if (s != null) {
        	s.close();
	    }    	
    }

    public void switchOff() {
// Print switch off message
    }

    public void processFile() {
    	openInputFile();
        try {
        	s.useDelimiter("[,\\s]+");
        	String tempToken;
        	
            while (s.hasNext()) {
            	if (s.hasNext("[\\-\\+\\*\\/]")) {
            		tempToken = s.next();
            		if (s.hasNextDouble()) {
            			if (tempToken.charAt(0) == '+') {
            				sum += s.nextDouble();
            			} else if (tempToken.charAt(0) == '-') {
            				sum -= s.nextDouble();
            			} else if (tempToken.charAt(0) == '*') {
            				sum *= s.nextDouble();
            			} else if (tempToken.charAt(0) == '/') {
            				sum /= s.nextDouble();
            			}
            		} else {
            			s.next();
            		}
            	} else {
            		s.next();
            		// continue;
            	}
            }
        } catch (Exception e) {
            e.printStackTrace();  //Output goes to System.err.
        } finally {
        	closeInputFile();
        }
    }
    
    public double getResult() {
        return sum;
    }
}
